/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 面试题 02.01. 移除重复节点
编写代码，移除未排序链表中的重复节点。保留最开始出现的节点。

示例1:

 输入：[1, 2, 3, 3, 2, 1]
 输出：[1, 2, 3]
示例2:

 输入：[1, 1, 1, 1, 2]
 输出：[1, 2]
提示：

链表长度在[0, 20000]范围内。
链表元素在[0, 20000]范围内。
进阶：

如果不得使用临时缓冲区，该怎么解决？

	492 ms	15.2 MB	Cpp
 */
#include "stdio.h"
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
    ListNode* removeDuplicateNodes(ListNode* head) {
        if(NULL==head) return NULL;
        ListNode* delp = head;
        while(NULL!=delp){
            ListNode* cur = delp;
            while(cur->next)
            {
                if(cur->next->val == delp->val)//移除节点
                {
                    cur->next=cur->next->next;
                }
                else{
                    cur = cur->next;
                }
            }
            delp = delp->next;
        }
        return head;
    }
};